From 97185bae75b16bea48d532aa5511417e485b1c06 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Wed, 17 Jun 2020 10:51:09 +0200
Subject: [PATCH] linux: Add support for iPhone XR, XS models

Modifying the udev serial to be acceptable as an hyphened UDID, as the
usbmux stack expects.

Closes: #114
---
 src/linux/up-device-idevice.c | 28 ++++++++++++++++++++++++++--
 1 file changed, 26 insertions(+), 2 deletions(-)

diff --git a/src/linux/up-device-idevice.c b/src/linux/up-device-idevice.c
index a808269..d2fa0a1 100644
--- a/src/linux/up-device-idevice.c
+++ b/src/linux/up-device-idevice.c
@@ -203,6 +203,28 @@ out:
 	return G_SOURCE_CONTINUE;
 }
 
+static char *
+get_device_uuid (GUdevDevice *native)
+{
+	const char *uuid;
+	char *retval;
+
+	uuid = g_udev_device_get_property (native, "ID_SERIAL_SHORT");
+	if (uuid == NULL)
+		return NULL;
+
+	if (strlen (uuid) != 24)
+		return g_strdup (uuid);
+
+	/* new style UDID: add hyphen between first 8 and following 16 digits */
+	retval = g_malloc0 (24 + 1 + 1);
+	memcpy (&retval[0], &uuid[0], 8);
+	retval[8] = '-';
+	memcpy (&retval[9], &uuid[8], 16);
+
+	return retval;
+}
+
 /**
  * up_device_idevice_coldplug:
  *
@@ -213,7 +235,7 @@ up_device_idevice_coldplug (UpDevice *device)
 {
 	UpDeviceIdevice *idevice = UP_DEVICE_IDEVICE (device);
 	GUdevDevice *native;
-	const gchar *uuid;
+	char *uuid;
 	const gchar *model;
 	UpDeviceKind kind;
 
@@ -223,7 +245,7 @@ up_device_idevice_coldplug (UpDevice *device)
 		return FALSE;
 
 	/* Get the UUID */
-	uuid = g_udev_device_get_property (native, "ID_SERIAL_SHORT");
+	uuid = get_device_uuid (native);
 	if (uuid == NULL)
 		return FALSE;
 
@@ -253,6 +275,8 @@ up_device_idevice_coldplug (UpDevice *device)
 	g_source_set_name_by_id (idevice->priv->start_id,
 				 "[upower] up_device_idevice_start_poll_cb (linux)");
 
+	g_free (uuid);
+
 	return TRUE;
 }
 
-- 
2.26.2

